Calculate clusters using hierarchical clustering methodΒΆ
Calculate clusters using hierarchical clustering method.
Expected output:
Input number of points: 2
Input point (eg. 1,1)A: 1,2
Input point (eg. 1,1)B: 3,4
Distance matrix no 1:
[0.0, 2.83]
[2.83, 0.0]
Cluster is: [AB]
import math
def distance(a, b):
x = float(a[0]) - float(b[0])
x= x * x
y = float(a[1]) - float(b[1])
y = y * y
dist = round(math.sqrt(x + y),2)
return dist
def minimum(matrix):
p = [0,0]
mn = 1000
for i in range(0, len(matrix)):
for j in range(0, len(matrix[i])):
if (matrix[i][j] > 0 and matrix[i][j] < mn):
mn = matrix[i][j]
p[0] = i
p[1] = j
return p
def newpoint(pt):
x = float(pt[0][0]) + float(pt[1][0])
x = x/2
y = float(pt[0][1]) + float(pt[1][1])
y = y/2
midpoint = [x, y]
return midpoint
if __name__ == '__main__':
n = int(input("Input number of points: "))
points = list()
outline = '['
i = 0
while(i < n):
s = input("Input point (eg. 1,1)" + chr(65 + i) + ": ")
c = s.split(",")
points.append(c)
i = i + 1
names={}
for i in range(0, len(points)):
names[str(points[i])] = chr(65 + i)
l = 0
while(len(points) > 1):
l = l + 1
matrix = list()
print('Distance matrix no. ' + str(l) + ': ')
for i in range(0, len(points)):
m = []
for j in range(0, len(points)):
m.append(0)
for j in range(0, len(points)):
m[j] = distance(points[i], points[j])
print(str(m))
matrix.append(m)
m = minimum(matrix)
pts = list()
p1 = points[m[0]]
pts.append(p1)
points.remove(p1)
p2 = points[m[1] - 1]
pts.append(p2)
points.remove(p2)
midpoint = newpoint(pts)
points.append(midpoint)
c1 = names.pop(str(p1))
c2 = names.pop(str(p2))
names[str(midpoint)] = "[" + str(c1) + str(c2) + "]"
outline = names[str(midpoint)]
print("Cluster is :", names[str(midpoint)])
Output:
Input number of points > 2
Input point (eg. 1,1) A > 1,2
Input point (eg. 1,1) B > 3,4
Distance matrix no.1:
[0.0, 2.83]
[2.83, 0.0]
Cluster is : [AB]